package com.example.demo.handler;

import com.example.rabbitmq.starter.handler.FailureHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

/**
 * 短信通知失败处理器
 * 当消息消费失败达到最大重试次数后，发送短信通知相关人员
 */
@Component
public class SmsNotificationFailureHandler implements FailureHandler {
    
    private static final Logger logger = LoggerFactory.getLogger(SmsNotificationFailureHandler.class);
    
    @Override
    public void handleFailure(String messageId, String messageContent, String messageType, int retryCount, Exception lastException) {
        try {
            // 构建短信内容
            String smsContent = buildSmsContent(messageId, messageType, retryCount, lastException);
            
            // 发送短信通知
            sendSmsNotification(smsContent);
            
            logger.info("消息失败处理完成 - 短信通知已发送, messageId: {}, messageType: {}, retryCount: {}", 
                       messageId, messageType, retryCount);
            
        } catch (Exception e) {
            logger.error("发送失败通知短信时出现异常, messageId: {}, error: {}", messageId, e.getMessage(), e);
        }
    }
    
    /**
     * 构建短信内容
     */
    private String buildSmsContent(String messageId, String messageType, int retryCount, Exception lastException) {
        StringBuilder content = new StringBuilder();
        content.append("【系统告警】消息消费失败通知\n");
        content.append("消息ID: ").append(messageId).append("\n");
        content.append("消息类型: ").append(messageType).append("\n");
        content.append("重试次数: ").append(retryCount).append("\n");
        content.append("失败原因: ").append(lastException != null ? lastException.getMessage() : "未知异常");
        return content.toString();
    }
    
    /**
     * 发送短信通知
     * 这里可以集成具体的短信服务提供商API
     */
    private void sendSmsNotification(String content) {
        // TODO: 集成具体的短信服务API
        // 例如：阿里云短信、腾讯云短信等
        
        // 模拟发送短信
        logger.info("发送短信通知: {}", content);
        
        // 实际实现示例：
        // smsService.sendSms(phoneNumbers, content);
    }
    
    @Override
    public String getHandlerName() {
        return "短信通知处理器";
    }
}